package cn.wolfcode.luowowo.member.service;

import cn.wolfcode.luowowo.common.exception.LogicException;
import cn.wolfcode.luowowo.member.domain.UserInfo;
import cn.wolfcode.luowowo.member.vo.UserVO;

import java.util.List;

/**
 * 用户服务
 */
public interface IUserInfoService {

    /**
     * 获取用户对象
     * @param id
     * @return
     */
    UserInfo get(Long id);

    /**
     *
     * @param phone
     * @return true代表手机号唯一，false代表手机号不唯一
     */
    boolean checkUnique(String phone);

    /**
     * 用户发送短信
     * @param phone
     */
    void sendVerifyCode(String phone)throws LogicException;


    /**
     * 注册
     * @param phone
     * @param nickname
     * @param password
     * @param rpassword
     * @param verifyCode
     */
    void userRegist(String phone, String nickname, String password, String rpassword, String verifyCode) throws LogicException;

    /**
     * 用户登录
     * @param username
     * @param password
     * @throws LogicException
     */
    String userLogin(String username, String password) throws LogicException;

    /**
     * 用户集合
     * @return
     */
    List<UserInfo> list();

    /**
     * 关注用户的集合
     * @param id
     * @return
     */
    List<Long> getFocusUserIdList(Long id);

    /**
     * 粉丝用户的集合
     * @param id
     * @return
     */
    List<Long> getFanUserIdList(Long id);

    /**
     * 修改用户信息
     * @param userInfo
     */
    UserInfo updateUserInfo(UserInfo userInfo);

    /**
     * 修改用户头像
     * @param userInfo
     * @return
     */
    void updateHeadImgUrl(UserInfo userInfo) throws LogicException;

    /**
     * 修改密码
     * @param vPassword    验证的密码
     * @param password     密码
     * @param userId       用户id
     */
    void updatePassword(String vPassword,String password, Long userId) throws LogicException;

    /**
     * 修改邮箱
     * @param email  邮箱
     * @param userId     用户id
     */
    void udpateEmail(String email, Long userId) throws LogicException;

    /**
     * 通过手机号进行身份验证
     * @param phone        手机号
     * @param verifyCode   验证码
     * @return
     */
    void authentication(String phone, String verifyCode) throws LogicException;

    /**
     * 通过用户id修改手机号
     * @param phone  手机号
     * @param userId 用户id
     */
    void updatePhone(String phone, Long userId) throws LogicException;

    /**
     * 将用户加入到黑名单中
     * @param userId       用户id
     * @param blackUserId  黑名单用户id
     */
    void addBlackUser(Long userId, Long blackUserId) throws LogicException;

    /**
     * 将用户从黑名单中移除
     * @param userId       用户id
     * @param blackUserId  黑名单用户id
     */
    void deleteBlackUser(Long userId, Long blackUserId);

    /**
     * 根据用户id查询的黑名单
     * @param userId  用户id
     * @return        返回黑名单用户集合
     */
    List<UserVO> blackUserList(Long userId);

    /**
     * 根据用户userId查询的黑名单的用户blackuserid
     * @param userId
     * @return
     */
    List<Long> blackUserIdList(Long userId);

    /**
     * 黑名单数据的持久化
     * @param userId
     * @param blackUserId
     */
    void persistenceBlackUser(Long userId, Long blackUserId);
}
